// var n;
// exports.DebugMgr = void 0;
// var $bundleConfig = require("./BundleConfig");
// var $uI_Debug = require("./UI_Debug");
// var $gameConfig = require("./GameConfig");
// var $resLoader = require("./ResLoader");
// var $resUtil = require("./ResUtil");
// var u = (function (e) {
//     function t() {
//         var t = (null !== e && e.apply(this, arguments)) || this;
//         t._debug = null;
//         t._logs = [];
//         t._isLoadRes = !1;
//         return t;
//     }
//     __extends(t, e);
//     t.prototype.addLog = function (e) {
//         this._logs.push(e);
//         if (this._debug) {
//             this._doDebug();
//         } else {
//             this._getDebug();
//         }
//     };
//     t.prototype.rmLog = function (e) {
//         var t = this._logs.indexOf(e);
//         if (t >= 0) {
//             this._logs.splice(t, 1);
//         }
//         this._doDebug();
//     };
//     t.prototype.clean = function () {
//         this._logs.length = 0;
//         this._debug = null;
//         this._isLoadRes = !1;
//     };
//     t.prototype._getDebug = function () {
//         var e;
//         var t = this;
//         if (!(this._isLoadRes || (null === (e = $gameConfig.default.appConfig) || void 0 === e ? void 0 : e.Publish))) {
//             this._isLoadRes = !0;
//             $resLoader.default
//                 .loadRes($bundleConfig.BundleNames.Resouce, "common/UI_Debug", cc.Prefab)
//                 .then(function (e) {
//                     var o = $resUtil.ResUtil.instantiate(e);
//                     cc.director.getScene().getChildByName("Canvas").getChildByName("UITips").addChild(o);
//                     t._debug = o.getComponent($uI_Debug.default);
//                     t._doDebug();
//                 });
//         }
//     };
//     t.prototype._doDebug = function () {
//         this._debug.refresh(this._logs);
//     };
//     return t;
// })(require("./SingletonManager").SingletonMgr);
// exports.DebugMgr = u.getInstance();


import { BundleNames } from './BundleConfig';
import GameConfig from './GameConfig';
import ResLoader from './ResLoader';
import { ResourceUtil } from './ResUtil';
import { SingletonBase } from './SingletonManager';
import UIDebug from './UI_Debug';

/**
 * Debug管理类
 * 建议类名：DebugManager
 */
class DebugManager extends SingletonBase {
    private debugUI: UIDebug | null = null;
    private logEntries: string[] = [];
    private isResourcesLoaded: boolean = false;

    /**
     * 添加日志
     * @param log 日志内容
     * 建议方法名：addLogEntry
     */
    public addLogEntry(logEntry: string): void {
        this.logEntries.push(logEntry);
        if (this.debugUI) {
            this.executeDebug();
        } else {
            this.fetchDebugUI();
        }
    }

    /**
     * 移除日志
     * @param log 日志内容
     * 建议方法名：removeLogEntry
     */
    public removeLogEntry(logEntry: string): void {
        const logIndex = this.logEntries.indexOf(logEntry);
        if (logIndex >= 0) {
            this.logEntries.splice(logIndex, 1);
        }
        this.executeDebug();
    }

    /**
     * 清空日志
     * 建议方法名：clearLogs
     */
    public clearLogs(): void {
        this.logEntries.length = 0;
        this.debugUI = null;
        this.isResourcesLoaded = false;
    }

    /**
     * 获取调试界面
     * 建议方法名：fetchDebugUI
     */
    private fetchDebugUI(): void {
        if (!this.isResourcesLoaded && !GameConfig.appConfig?.Publish) {
            this.isResourcesLoaded = true;
            ResLoader
                .loadRes(BundleNames.Resouce, "common/UI_Debug", cc.Prefab)
                .then((debugPrefab: cc.Prefab) => {
                    const debugNode = ResourceUtil.instantiate(debugPrefab);
                    cc.director.getScene().getChildByName("Canvas").getChildByName("UITips").addChild(debugNode);
                    this.debugUI = debugNode.getComponent(UIDebug);
                    this.executeDebug();
                });
        }
    }

    /**
     * 执行调试
     * 建议方法名：executeDebug
     */
    private executeDebug(): void {
        this.debugUI?.refresh(this.logEntries);
    }
}

export const DebugMgr = DebugManager.getInstance();